package com.bambooshoot.test;

import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;

import java.io.File;
import java.io.FileOutputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class JavaFileToWordConverter {

    public static void main(String[] args) throws Exception {
        String folderPath = "C:\\Users\\Towarson\\Desktop\\工作资料\\test"; // 你的.java文件所在的文件夹路径
        String outputFilePath = "C:\\Users\\Towarson\\Desktop\\dvs.docx"; // 输出的.docx文件路径
        int maxLines = 2500; // 限制输出为大约50页

        // 创建一个Word文档
        XWPFDocument document = new XWPFDocument();

        // 设置字体为宋体，字号为5号字，行距为13.5磅
        XWPFParagraph paragraph = document.createParagraph();
        XWPFRun run = paragraph.createRun();
        run.setFontFamily("宋体");
        run.setFontSize(10); // 5号字对应约10pt
//        paragraph.setSpacingBetween(1.5, LineSpacingRule.EXACT);
//        paragraph.setSpacingAfterLines(13.5 * 20); // 设置固定行距为13.5磅

        int lineCount = 0; // 记录输出的行数
        boolean insideCommentBlock = false; // 用于标记是否在多行注释中

        // 扫描文件夹下的所有.java文件
        try (Stream<Path> paths = Files.walk(Paths.get(folderPath))) {
            List<File> javaFiles = paths.filter(Files::isRegularFile)
                .filter(p -> p.toString().endsWith(".java"))
                .map(Path::toFile)
                .collect(Collectors.toList());

            for (File javaFile : javaFiles) {
                // 读取文件并删除不需要的部分
                List<String> lines = Files.readAllLines(javaFile.toPath());

                for (String line : lines) {
                    // 超过指定行数时，停止输出
                    if (lineCount >= maxLines) {
                        break;
                    }

                    // 跳过import语句
                    if (line.trim().startsWith("import")) {
                        continue;
                    }

                    // 跳过多行注释的开始
                    if (line.trim().startsWith("/**")) {
                        insideCommentBlock = true;
                        continue;
                    }

                    // 跳过多行注释的结束
                    if (insideCommentBlock) {
                        if (line.trim().endsWith("*/")) {
                            insideCommentBlock = false;
                        }
                        continue;
                    }

                    // 跳过单行注释和空行
                    if (!line.trim().isEmpty() && !line.trim().startsWith("//")) {
                        run.setText(line);
                        run.addCarriageReturn(); // 换行
                        lineCount++;
                    }

                    // 超过最大行数时停止
                    if (lineCount >= maxLines) {
                        break;
                    }
                }

                // 在每个文件之间加入一个空行以示区分
                if (lineCount < maxLines) {
                    run.addCarriageReturn();
                }
            }
        }

        // 将内容写入.docx文件
        try (FileOutputStream out = new FileOutputStream(new File(outputFilePath))) {
            document.write(out);
        }

        System.out.println("Java代码已成功写入Word文档: " + outputFilePath);
    }
}
